package com.dayuanit.dy17.spring.test;

import com.dayuanit.dy17.spring.config.LibraryConfig;
import com.dayuanit.dy17.spring.entity.Dog;
import com.dayuanit.dy17.spring.entity.Person;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest3 {
    public static void main(String[] args) {
        //构建IOC容器
        ApplicationContext context = new AnnotationConfigApplicationContext(LibraryConfig.class);

        Person person = context.getBean(Person.class);
        person.speak();

        Dog dog = context.getBean(Dog.class);

        System.out.println(person.getDog() == dog);

        //面试题：spring创建的对象有几种方式？
        //1.通过xml的bean标签创建对象  缺点：要做大量的配置
        //2.通过Component-scan组件扫描器创建对象。简称为：注解的方式。
        //3.通过JavaConfig的方式，也就是在方法上使用Bean标签注释，然后通过AnnotationConfigApplicationContext进行解析。

        //实际开发中，如果是SSM框架，则使用第1和第2种配合使用
        //如果是SpringBoot项目，则使用第3种。

        //Spring的IOC容器是怎么初始化的？(Spring是怎么初始化的？)
        //答：通过ApplicationContext初始化的。ApplicationContext有两个常用的子类：
        //ClassPathXmlApplicationContext和AnnotationConfigApplicationContext,
        //其中xml和注解的方式，通过ClassPathXmlApplicationContext初始化，
        //JavaConfig方式通过AnnotationConfigApplicationContext初始化。
    }
}
